# 模型类
from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash

from watchlist import db

# 存储用户信息的类
# 添加 username 字段和 password_hash 字段，分别用来存储登录所需的用户名和密码散列值
# 继承 Flask-Login 提供的 UserMixin 类,拥有几个用于判断认证状态的属性和方法，
# 其中最常用的是 is_authenticated 属性：如果当前用户已经登录，那么 current_user.is_authenticated 会返回 True
class User(db.Model,UserMixin):  # 表名将会是 user（自动生成，小写处理）
    id = db.Column(db.Integer, primary_key=True)  # 主键
    name = db.Column(db.String(20))  # 名字
    # 同时添加两个方法来实现设置密码和验证密码的功能
    username = db.Column(db.String(20))  # 用户名
    password_hash = db.Column(db.String(128))  # 密码散列值
    def set_password(self, password):  # 用来设置密码的方法，接受密码作为参数
        self.password_hash = generate_password_hash(password)  # 将生成的密码保持到对应字段
    def validate_password(self, password):  # 用于验证密码的方法，接受密码作为参数
        return check_password_hash(self.password_hash, password)  # 返回布尔值
class Movie(db.Model):  # 表名将会是 movie
    id = db.Column(db.Integer, primary_key=True)  # 主键
    title = db.Column(db.String(60))  # 电影标题
    year = db.Column(db.String(4))  # 电影年份